using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._3DAnalystTools._PointCloud._Classification
{
    /// <summary>
    /// <para>Classify LAS Building</para>
    /// <para>Classifies building rooftops and sides in LAS
    /// data.</para>
    /// <para>对 LAS 中的建筑屋顶和侧面进行分类
    /// 数据。</para>
    /// </summary>    
    [DisplayName("Classify LAS Building")]
    public class ClassifyLasBuilding : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ClassifyLasBuilding()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_las_dataset">
        /// <para>Input LAS Dataset</para>
        /// <para>The LAS dataset to be classified.</para>
        /// <para>要分类的 LAS 数据集。</para>
        /// </param>
        /// <param name="_min_height">
        /// <para>Minimum Rooftop Height</para>
        /// <para>The height from the ground that defines the lowest point from which rooftop points will be identified.</para>
        /// <para>距地面的高度，定义了识别屋顶点的最低点。</para>
        /// </param>
        /// <param name="_min_area">
        /// <para>Minimum Area</para>
        /// <para>The smallest area of the building rooftop.</para>
        /// <para>建筑物屋顶的最小面积。</para>
        /// </param>
        public ClassifyLasBuilding(object _in_las_dataset, string? _min_height, object _min_area)
        {
            this._in_las_dataset = _in_las_dataset;
            this._min_height = _min_height;
            this._min_area = _min_area;
        }
        public override string ToolboxName => "3D Analyst Tools";

        public override string ToolName => "Classify LAS Building";

        public override string CallName => "3d.ClassifyLasBuilding";

        public override List<string> AcceptEnvironments => ["extent", "parallelProcessingFactor"];

        public override object[] ParameterInfo => [_in_las_dataset, _min_height, _min_area, _compute_stats.GetGPValue(), _extent, _boundary, _process_entire_files.GetGPValue(), _derived_las_dataset, _point_spacing, _reuse_building.GetGPValue(), _photogrammetric_data.GetGPValue(), _method.GetGPValue(), _classify_above_roof.GetGPValue(), _above_roof_height, _above_roof_code, _classify_below_roof.GetGPValue(), _below_roof_code, _update_pyramid.GetGPValue()];

        /// <summary>
        /// <para>Input LAS Dataset</para>
        /// <para>The LAS dataset to be classified.</para>
        /// <para>要分类的 LAS 数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input LAS Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_las_dataset { get; set; }


        /// <summary>
        /// <para>Minimum Rooftop Height</para>
        /// <para>The height from the ground that defines the lowest point from which rooftop points will be identified.</para>
        /// <para>距地面的高度，定义了识别屋顶点的最低点。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Minimum Rooftop Height")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public string? _min_height { get; set; }


        /// <summary>
        /// <para>Minimum Area</para>
        /// <para>The smallest area of the building rooftop.</para>
        /// <para>建筑物屋顶的最小面积。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Minimum Area")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _min_area { get; set; }


        /// <summary>
        /// <para>Compute statistics</para>
        /// <para><xdoc>
        ///   <para>Specifies whether statistics will be computed for the .las files referenced by the LAS dataset. Computing statistics provides a spatial index for each .las file, which improves analysis and display performance. Statistics also enhance the filtering and symbology experience by limiting the display of LAS attributes, such as classification codes and return information, to values that are present in the .las file.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Statistics will be computed. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Statistics will not be computed.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否为 LAS 数据集引用的 .las 文件计算统计数据。计算统计为每个 .las 文件提供空间索引，从而提高分析和显示性能。统计数据还通过将 LAS 属性（如分类代码和返回信息）的显示限制为 .las 文件中存在的值来增强过滤和符号系统体验。</para>
        ///   <bulletList>
        ///     <bullet_item>选中—将计算统计数据。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中—不计算统计数据。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Compute statistics")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _compute_stats_value _compute_stats { get; set; } = _compute_stats_value._true;

        public enum _compute_stats_value
        {
            /// <summary>
            /// <para>COMPUTE_STATS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("COMPUTE_STATS")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_COMPUTE_STATS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_COMPUTE_STATS")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Processing Extent</para>
        /// <para><xdoc>
        ///   <para>The extent of the data that will be evaluated.</para>
        ///   <bulletList>
        ///     <bullet_item>Default—The extent will be based on the maximum extent of all participating inputs. This is the default.</bullet_item><para/>
        ///     <bullet_item>Union of Inputs—The extent will be based on the maximum extent of all inputs.</bullet_item><para/>
        ///     <bullet_item>Intersection of Inputs—The extent will be based on the minimum area common to all inputs.</bullet_item><para/>
        ///     <bullet_item>Current Display Extent—The extent is equal to the visible display. The option is not available when there is no active map.</bullet_item><para/>
        ///     <bullet_item>As Specified Below—The extent will be based on the minimum and maximum extent values specified.</bullet_item><para/>
        ///     <bullet_item>Browse—The extent will be based on an existing dataset.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将评估的数据范围。</para>
        ///   <bulletList>
        ///     <bullet_item>默认值 - 范围将基于所有参与输入的最大范围。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>输入并集 - 范围将基于所有输入的最大范围。</bullet_item><para/>
        ///     <bullet_item>输入交点 - 范围将基于所有输入共有的最小面积。</bullet_item><para/>
        ///     <bullet_item>当前显示范围 - 范围等于可见显示。当没有活动地图时，该选项不可用。</bullet_item><para/>
        ///     <bullet_item>如下所述 - 范围将基于指定的最小和最大范围值。</bullet_item><para/>
        ///     <bullet_item>浏览 - 范围将基于现有数据集。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Processing Extent")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _extent { get; set; } = null;


        /// <summary>
        /// <para>Processing Boundary</para>
        /// <para>A polygon feature that defines the area of interest to be processed.</para>
        /// <para>定义要处理的感兴趣区域的面要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Processing Boundary")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _boundary { get; set; } = null;


        /// <summary>
        /// <para>Process entire LAS files that intersect extent</para>
        /// <para><xdoc>
        ///   <para>Specifies how the area of interest will be used in determining how .las files will be processed. The area of interest is defined by the Processing Extent parameter value, the Processing Boundary parameter value, or a combination of both.</para>
        ///   <bulletList>
        ///     <bullet_item>Unchecked—Only LAS points that intersect the area of interest will be processed. This is the default.</bullet_item><para/>
        ///     <bullet_item>Checked—If any portion of a .las file intersects the area of interest, all the points in that .las file, including those outside the area of interest, will be processed.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定在确定如何处理 .las 文件时如何使用感兴趣区域。感兴趣区域由“处理范围”参数值、“处理边界”参数值或两者的组合定义。</para>
        ///   <bulletList>
        ///     <bullet_item>未选中—仅处理与感兴趣区域相交的 LAS 点。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>选中 - 如果 .las 文件的任何部分与感兴趣区域相交，则将处理该 .las 文件中的所有点，包括感兴趣区域之外的点。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Process entire LAS files that intersect extent")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _process_entire_files_value _process_entire_files { get; set; } = _process_entire_files_value._false;

        public enum _process_entire_files_value
        {
            /// <summary>
            /// <para>PROCESS_ENTIRE_FILES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("PROCESS_ENTIRE_FILES")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>PROCESS_EXTENT</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("PROCESS_EXTENT")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Derived LAS Dataset</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Derived LAS Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _derived_las_dataset { get; set; }


        /// <summary>
        /// <para>Average Point Spacing</para>
        /// <para>The average spacing of LAS points. This parameter is no longer used.</para>
        /// <para>LAS 点的平均间距。不再使用此参数。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Average Point Spacing")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string? _point_spacing { get; set; } = null;


        /// <summary>
        /// <para>Reuse existing building classified points</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the existing building classified points will be reused or reevaluated.</para>
        ///   <bulletList>
        ///     <bullet_item>Unchecked—Existing building classified points will be reevaluated to fit the criteria for plane detection, and points that do not fit the specified area and height will be assigned a value of 1. This is the default.</bullet_item><para/>
        ///     <bullet_item>Checked—Existing building classified points will contribute to the plane detection process but will not be reclassified in the event they do not meet the criteria specified in the tool's execution. Use this option if the existing classification is necessary.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否重复使用或重新评估现有建筑物分类点。</para>
        ///   <bulletList>
        ///     <bullet_item>未选中 - 将重新评估现有建筑物分类点以符合平面检测条件，并且不符合指定区域和高度的点将被分配值 1。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>选中 - 现有建筑物分类点将参与平面检测过程，但如果它们不符合工具执行中指定的条件，则不会对其进行重新分类。如果需要现有分类，请使用此选项。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Reuse existing building classified points")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _reuse_building_value _reuse_building { get; set; } = _reuse_building_value._false;

        public enum _reuse_building_value
        {
            /// <summary>
            /// <para>REUSE_BUILDING</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("REUSE_BUILDING")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>RECLASSIFY_BUILDING</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("RECLASSIFY_BUILDING")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Is photogrammetric data</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the points in the .las file were derived using a photogrammetric technique.</para>
        ///   <bulletList>
        ///     <bullet_item>Unchecked—The points in the .las file were obtained from a lidar survey, not from a photogrammetric technique for producing point clouds. This is the default.</bullet_item><para/>
        ///     <bullet_item>Checked—The points in the .las file were obtained using a photogrammetric technique for producing point clouds from overlapping imagery.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定 .las 文件中的点是否使用摄影测量技术派生。</para>
        ///   <bulletList>
        ///     <bullet_item>未选中 - .las 文件中的点是从激光雷达测量中获取的，而不是从用于生成点云的摄影测量技术中获取的。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>选中 - .las 文件中的点是使用摄影测量技术获取的，该技术用于从重叠影像生成点云。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Is photogrammetric data")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _photogrammetric_data_value _photogrammetric_data { get; set; } = _photogrammetric_data_value._false;

        public enum _photogrammetric_data_value
        {
            /// <summary>
            /// <para>PHOTOGRAMMETRIC_DATA</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("PHOTOGRAMMETRIC_DATA")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NOT_PHOTOGRAMMETRIC_DATA</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NOT_PHOTOGRAMMETRIC_DATA")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Classification Method</para>
        /// <para><xdoc>
        ///   <para>Specifies the classification method that will be used.</para>
        ///   <bulletList>
        ///     <bullet_item>Aggressive—Points that fit the planar rooftop characteristics with a relatively high tolerance for outliers will be detected. Use this method if the points are not well calibrated.</bullet_item><para/>
        ///     <bullet_item>Standard—Points that fit the planar rooftop characteristics with a relatively moderate tolerance for irregular points will be detected. This is the default</bullet_item><para/>
        ///     <bullet_item>Conservative—Points that fit the planar rooftop characteristics with a relatively low tolerance for irregular points will be detected. Use this method if the building points are co-planar with points from objects that are not buildings.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将使用的分类方法。</para>
        ///   <bulletList>
        ///     <bullet_item>激进—将检测符合平面屋顶特征且对异常值容差相对较高的点。如果点没有很好地校准，请使用此方法。</bullet_item><para/>
        ///     <bullet_item>标准 - 将检测符合平面屋顶特征且对不规则点具有相对适中容差的点。这是默认设置</bullet_item><para/>
        ///     <bullet_item>保守 - 将检测符合平面屋顶特征且对不规则点的容差相对较低的点。如果建筑点与非建筑物对象中的点共面，请使用此方法。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Classification Method")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _method_value _method { get; set; } = _method_value._STANDARD;

        public enum _method_value
        {
            /// <summary>
            /// <para>Standard</para>
            /// <para>Standard—Points that fit the planar rooftop characteristics with a relatively moderate tolerance for irregular points will be detected. This is the default</para>
            /// <para>标准 - 将检测符合平面屋顶特征且对不规则点具有相对适中容差的点。这是默认设置</para>
            /// </summary>
            [Description("Standard")]
            [GPEnumValue("STANDARD")]
            _STANDARD,

            /// <summary>
            /// <para>Conservative</para>
            /// <para>Conservative—Points that fit the planar rooftop characteristics with a relatively low tolerance for irregular points will be detected. Use this method if the building points are co-planar with points from objects that are not buildings.</para>
            /// <para>保守 - 将检测符合平面屋顶特征且对不规则点的容差相对较低的点。如果建筑点与非建筑物对象中的点共面，请使用此方法。</para>
            /// </summary>
            [Description("Conservative")]
            [GPEnumValue("CONSERVATIVE")]
            _CONSERVATIVE,

            /// <summary>
            /// <para>Aggressive</para>
            /// <para>Aggressive—Points that fit the planar rooftop characteristics with a relatively high tolerance for outliers will be detected. Use this method if the points are not well calibrated.</para>
            /// <para>激进—将检测符合平面屋顶特征且对异常值容差相对较高的点。如果点没有很好地校准，请使用此方法。</para>
            /// </summary>
            [Description("Aggressive")]
            [GPEnumValue("AGGRESSIVE")]
            _AGGRESSIVE,

        }

        /// <summary>
        /// <para>Classify points above the roof</para>
        /// <para><xdoc>
        ///   <para>Specifies whether points above the planes detected for the roof will be classified.</para>
        ///   <bulletList>
        ///     <bullet_item>Unchecked—Points detected above the planes will not be classified. This is the default.</bullet_item><para/>
        ///     <bullet_item>Checked—Points detected above the planes will be classified.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否对为屋顶检测到的平面上方的点进行分类。</para>
        ///   <bulletList>
        ///     <bullet_item>未选中 - 在平面上方检测到的点将不进行分类。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>选中 - 将对平面上方检测到的点进行分类。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Classify points above the roof")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _classify_above_roof_value _classify_above_roof { get; set; } = _classify_above_roof_value._false;

        public enum _classify_above_roof_value
        {
            /// <summary>
            /// <para>CLASSIFY_ABOVE_ROOF</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("CLASSIFY_ABOVE_ROOF")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_CLASSIFY_ABOVE_ROOF</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_CLASSIFY_ABOVE_ROOF")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Maximum Height Above Roof</para>
        /// <para>The maximum height of the points above the building rooftop that will be classified to the value designated in the Above Roof Class Code parameter.</para>
        /// <para>建筑物屋顶上方点的最大高度，该点将被分类为屋顶上方类代码参数中指定的值。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Maximum Height Above Roof")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string? _above_roof_height { get; set; } = null;


        /// <summary>
        /// <para>Above Roof Class Code</para>
        /// <para>The class code that will be assigned to points above the roof.</para>
        /// <para>将分配给屋顶上方点的类代码。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Above Roof Class Code")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long? _above_roof_code { get; set; } = null;


        /// <summary>
        /// <para>Classify points below the roof</para>
        /// <para><xdoc>
        ///   <para>Specifies whether points between the roof and the ground will be classified.</para>
        ///   <bulletList>
        ///     <bullet_item>Unchecked—Points between the roof and the ground will not be classified. This is the default.</bullet_item><para/>
        ///     <bullet_item>Checked—Points between the roof and the ground will be classified.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否对屋顶和地面之间的点进行分类。</para>
        ///   <bulletList>
        ///     <bullet_item>未选中 - 不会对屋顶和地面之间的点进行分类。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>选中 - 将对屋顶和地面之间的点进行分类。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Classify points below the roof")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _classify_below_roof_value _classify_below_roof { get; set; } = _classify_below_roof_value._false;

        public enum _classify_below_roof_value
        {
            /// <summary>
            /// <para>CLASSIFY_BELOW_ROOF</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("CLASSIFY_BELOW_ROOF")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_CLASSIFY_BELOW_ROOF</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_CLASSIFY_BELOW_ROOF")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Below Roof Class Code</para>
        /// <para>The class code that will be assigned to points between the ground and the roof.</para>
        /// <para>将分配给地面和屋顶之间的点的类代码。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Below Roof Class Code")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long? _below_roof_code { get; set; } = null;


        /// <summary>
        /// <para>Update pyramid</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the LAS dataset pyramid will be updated after the class codes are modified.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—The LAS dataset pyramid will be updated. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—The LAS dataset pyramid will not be updated.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定修改类代码后是否更新 LAS 数据集金字塔。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 将更新 LAS 数据集金字塔。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中—LAS 数据集金字塔将不会更新。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Update pyramid")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _update_pyramid_value _update_pyramid { get; set; } = _update_pyramid_value._true;

        public enum _update_pyramid_value
        {
            /// <summary>
            /// <para>UPDATE_PYRAMID</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("UPDATE_PYRAMID")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_UPDATE_PYRAMID</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_UPDATE_PYRAMID")]
            [GPEnumValue("false")]
            _false,

        }

        public ClassifyLasBuilding SetEnv(object extent = null, object parallelProcessingFactor = null)
        {
            base.SetEnv(extent: extent, parallelProcessingFactor: parallelProcessingFactor);
            return this;
        }

    }

}